Problém s kozou


[Zpět na hlavní stránku]

Popis problému: Pasáček chodí každý den s kozou na pastvu. Koza se pase tak, že se pomocí pětimetrového provazu připoutá ke kolíku, který je zabodnutý v zemi. Přes den se koza pohybuje okolo kolíku kolik jí dovolí provaz a vyžere tak kolo o poloměru pět metrů. Druhý den ji pasáček opět vyvede na pastvu a chce kolík s kozou zabodnou do obvodu kruhu, který již včera koza vyžrala. Je zjevné, že pokud provaz neprodlouží, koza se nažere méně než včera. Takže masáček musí prodloužit provaz. Otázka zní o kolik, nebo chcete-li jak má být dlouhý, aby se koza nažrala srejně jako včera.

Popis řešení

Při hledání řešení budu postupovat tak, že budu hledat vztahy platící mezi různými částmi příkladu a ty se pak pokusím spojit tak, aby z nich vyplynulo řešení.

Na Obr 1. Je nakreslena situace, která nastane druhého dne. Poloměr r je zadán jako 5 metrů a poloměr velké kružnice R je neznámá kterou se pokusím v dalším textu vypočíst, nebo se aspoň a její přesné hodnotě přiblížit. První vztah který napíšu je obsah průniku obou kruhů. Ze zadání vyplývá, že obsah modrého kruhu se má rovnat obsahu zeleného zelenému zmenšeného o plochu Sx.
(1)

Pomocí znalosti Sx již můžu napsat důležitou rovnici, v které je vyjádřen vztah mezi jednotlivými částmi kruhu.
(2)

V poslední rovnici nbude problém vypočítat obsahy kruhů S1 a S2, ale na první pohled je jasné, že tak jednoduché to již nebude v případe obsahu průniků kruhů (tedy Sx). Celá situace průniku je dále blíže popsána.
Na obou obrázcích jsou neodpovídající vzájemné poměry obou poloměrů kruhů, je to proto, aby více vynikli vztahy mezi jednotlivými výsečemi a některé přímky se neslévali.

Na obrázku 2 jsou zobrazeny všechny klíčové body a přímky nutné k nalezení výsledku. Úsečky, které jsou nakreslené modrou barvou mají delku hledaného poloměru R, a přímky nakreslené červenou barvou mají délku poloměru původní zadané kružnice r, tedy 5 metrů. Dále ve stručnosti popíšu význam jednotlivých proměnných.
prom.popis
Rpoloměr hledaného kruhu
rpoloměr známého malého kruhu, je 5 metrů
Aje průnik obou kružnic, velké a malé
Bstřed velkého hledaného kruhu
Cstřed malého zadaného kruhu
vje výška na stranu trojúhelníka ABC, má délku R
j a gvýznam těchto úhlú je zřejmí

V dalsím se zaměřím na výpocet oblast Sx.

Výpočet oblasti Sx

Je poměrně jednoduché odhalit, že obsah hledané oblasti je složen kruhových výsečí, které na sebe navazují. Označím si je abych na něj mohl později jednoduše odkazovat.
Savýseč je o poloměru R a o úhlu 2*j
Sbvýseč je o poloměru r a o úhlu 2*g
SABCObsah trouúhelníku mezi body A,B a C

Při bližším pohledu na Obrázek 2. je vidět, že pomocí právě definovaných obsahů výsečí a trojúhelníka lze zformulavat první vyjádření obsahu Sx.
Obsah hledané plochy bude součet obsahů obou výsečí bez obsahu trojúhelníka SABC, ten musím odečíst dvakrát, protože dva tyto troujúhelníky obsahuje každá z obou výsečí. Výraz bude vypadat takto:
(3)

Po krátké matematické vsuvce budu pokračovat ve vyjadřování rovnice (3).

Matematická vsuvka:

1. připomenu , že vzorec pro obsah kruhové výseče je:
(4)

kde j je v radiánech.

Konec vsuvky

A nyní již můžeme přistoupit k vlastnímu počítání. Nejprve si v obrázku najdeme jednoduché základní vztahy, potom mezi nimi budeme hledat další vztahy až se snad povede dosadit do rovnice (3) a tím zjistit obsah Sx a z něho pak i hledaný poloměr. Trojúhelník ABC jsem ještě jednou nakreslil, aby lépe vyniklo značení jednotlivých stran, bodů a úhlů. Potom již můžu začít počítat

Úhel j

Tento, úhel je zjevně klíčovým, protože z jeho znalostí, budeme moci dopočíst další proměnné. Tedy j je úhel v rovnostranném trojúhelníku ABC, který svýrá základna délky R s odvěsnou délky r. Na obrázku 3 je situace nakreslena. Z ní je vidět, že platí :

A po vytvoření inverzní funkce:

Výška na stranu R

Ta se dá vypočíst z Pythagorovi věty a2=b2+c2


po úpravě
(5)

poslední vztah je hledané vyjádření výšky v závislosti na R a r.

Obsah trojúhelníka SABC

Vzhledem k tomu, že známe jednu stranu troujúhelníka a ještě výšku na tuto stranu je jednuché spočíst hledaný obsah troujúhelníka SABC. Do vztahu pro obsah troujúhelníka dosadím za výšku (5).

Obsah výseče - Sa

Oblast Sa je výseč okolo úhlu 2j z hledané kružnice o poloměru R se středem v bodě B. Její obsah podle (4) je:

Obsah výseče - Sb

Oblast Sb je výseč okolo úhlu 2g ze zadané kružnice o poloměru r, tedy 5 metrů, se středem v bodě C. Úhel g vypočtu ze základního vztahu platícího v troujúhelnících, tedy, že součet úhlů je p.
p=2j+g
g=p-2j

Tedy již nebude těžké doplnit vypočítaný úhel do vzorce pro obsah kruhové výseče (4).

Obsah Sx

A nyní již můžeme psát rovnici ze které dostaneme Sx. Ta vznikne dosazením Sa, Sb a SABC do vztahu (3). Z toho vznikne:

A teď již můžeme dosadit hodnotu Sx do rovnice (2). Tím dostaneme rovnici:

v předešlé rovnici dosadím vzorec pro obsah kruhu za S1 a S2 a z té již vyjde rovnice v které se vyskytuje pouze R a r.

v tomto vztahu již nemám jiné proměnné než zadanou hodnotu poloměru r a hledaný poloměr R. Bohužel je na první pohled vidět, že vyjádřit z vypočtené rovnice jednoznačnou funkční závislost R na r nebude jednoduché. Nicméně provedu několik úprav, v kterých rovnici dále zjednoduším. Další kroky při upravování rovnice mě již nic nového pravděpodobně nepřinesou, jsou to jenom kosmetické úpravy. Nejprve převedu všechny členy na pravou stranu:

roznásobím závorku a zjednodušším výraz pod odmocninou:

v dalším kroku posčítám co jde a za r dosadím 5.

V tuto chvíli jsem již došel k výsledku. Nalezl jsem jednoznačnou závislost R na r. Přesto nené jednoduché toto rovnici řešit. V dalších krocích provedu výpočet R pomocí numerických metod.

Výpočet R

přestože jsem rovnici zjednodušil co to šlo, stále nelze mluvit o tom, že bych dokázal najít její řešení. Dále již nebudu postupovat naprosto obecně a tak přesně. Rovnici si teď představím jako funkci :
F(R) = 0
u které hledám nulové kořeny v bodě r. Na to bych mohl použít Newtonovu metodu separace kořenů, ale to se mi zdá příliš složité. Musel bych vytvořit derivaci funkce a to by počítání protáhlo. Raději se pokusím najít kořeny rovnice pomocí postupného zjemňování intervalu ve kterém se bude nacházet kořen. K tomu využiji Bolzanovi věty:

Je-li f spojitá funkce na intervalu <a,b> a platí-li f(a)f(b) < 0, pak uvnitř tohoto intervalu leží alespoň jeden kořen rovnice f(x)=0.

Ještě musím určit interval <a,b>, ale to nebude těžké, o R vím, že bude určitě větší než 5, jinak by koza, nikdy nemohla mít k dispozici stejnou plochu jako minulý den protože bych jí dal k dispozicci menší kolo. Dále hledaný poloměr kola R bude určitě menší než 10. Kružnice o poloměru 10 má 4-krát větší obsah než původní, což je určitě více než mohu potřebovat.
Abych nemusel počítání intervalů provádět ročně vzal jsem si na pomoc VBA. Pomocí jednoduchého prográmku jsem se postupně přibližoval k hledané hodnotě těmito čísly:
1    7
2    6
3    6,5
4    6,25
5    6,375
6    6,3125
7    6,28125
8    6,265625
9    6,2578125
10   6,25390625
11   6,255859375
12   6,2568359375
13   6,25634765625
14   6,256103515625
15   6,2559814453125
16   6,25604248046875
17   6,25607299804688
18   6,25605773925781
19   6,25606536865234
20   6,25606155395508
21   6,25606346130371
22   6,25606250762939
23   6,25606298446655
24   6,25606274604797
25   6,25606262683868
26   6,25606256723404
27   6,25606253743172
28   6,25606255233288
29   6,2560625448823
30   6,25606254860759
31   6,25606254674494
32   6,25606254767627
33   6,2560625472106
34   6,25606254697777
35   6,25606254686136
36   6,25606254680315
37   6,25606254677405
38   6,2560625467886
39   6,25606254679587
40   6,25606254679951
41   6,25606254679769
42   6,25606254679678
43   6,25606254679724
44   6,25606254679701
45   6,25606254679712
46   6,25606254679718
47   6,25606254679721
48   6,25606254679722
49   6,25606254679722
50   6,25606254679722
51   6,25606254679722
52   6,25606254679722
53   6,25606254679722
54   6,25606254679722
Je vidět, že od pozice 48 se vypočtená hodnota již neměnila, proto ji můžu považovat za přibližnou hodnotu hledaného čísla R. Vypočítat větší počet desetinních míst než jsem uvedl, by bylo složitější. U tohoto výpočtu jsem použil největší datový typ ve VBA - Double ( větší datový typ decimal moc použitelný není). Pokud by jste se chtěli podívat na další desetinné pozice museli byste hodně počítat a programovat. Ale tím nikoho nechci odrazovat, až se o to pokusíte tak mi o tom dejte vědět.

Výsledek

Tedy délka provazu spočítaná na 14 desetinných míst je 6,25606254679722 metru. Vzhledem k poměrné obtížnosti, nepředpokládám že by to pasáček někdy spočetl, a kdyby se mu to povedlo, tak by asi nedělal pasáčka koz.

Další úvaha

Je vidět, že nový kruh je o něco delší než byl původní. pokud bych od tohoto nového kruhu sestrojil za stejných podmínek ještě jeden opět bych dostal po chvíli počítání další poloměr. o něm předpokládám, že bude větší než oba předešlé. Pokud bych od tohoto třetího poloměru vypočítal čtrvtý a tak dále dostanu řadu poloměrů, ta se dá považovat za posloupnost. O ní předpokládám, že bude stoupající, a pravděpodobně bude mít i limitu. Pokud se vám k ní podaří dojít tak mi dejte vědět.


Ahoj Honza


E-mail: Jan_Jirout@seznam.cz




Výpis modulu, který to vypočte.

Option Explicit
Const P = 3.14159265358979

'ucuje arkus kosinu argumentu
Public Function Arccos(x As Double) As Double
  Arccos = Atn(-x / Sqr(-x * x + 1)) + 2 * Atn(1)
End Function

Public Function f(x As Double) As Double
 f = P * x * x - 50 * P
 f = f + (50 - x * x) * Arccos(x / 10)
 f = f + x * Sqr(100 - x * x) / 2
End Function

Public Function Hledej(Dolni As Double, Horni As Double, deep As Integer) As Double
   Dim pul As Double
   Dim i As Integer   'pres ni jde cyklus do deep
   Dim Fpul As Double
   Dim fDolni As Double
   Dim fHorni As Double
   
   
   For i = 1 To deep
      pul = Dolni + (Horni - Dolni) / 2
      Fpul = f(pul)
      fHorni = f(Horni)
      fDolni = f(Dolni)
      
      If Fpul = 0 Then 'konec cyku, nasel jsem presne
        Hledej = pul
        i = deep + 1
      End If
      
      If Fpul * fDolni < 0 Then
        Horni = pul
      End If
      
      If Fpul * fHorni < 0 Then
        Dolni = pul
      End If
      Debug.Print i & "   " & pul
   Next i
   Hledej = pul
End Function


Sub spocti()
  MsgBox Hledej(5, 9, 100)
End Sub